Apache Ivy ডিপেন্ডেন্সি ম্যানেজমেন্ট টুলের একটি গুরুত্বপূর্ণ ফিচার হলো built-in configurations। Configurations হল সেই বিশেষ প্রসঙ্গ বা পরিবেশ যেখানে একটি নির্দিষ্ট ডিপেন্ডেন্সি ব্যবহৃত হবে। Ivy তিনটি গুরুত্বপূর্ণ বিল্ট-ইন কনফিগারেশন প্রদান করে যা সাধারণত Java প্রোজেক্টে ব্যবহৃত হয়:
এই কনফিগারেশনগুলো আপনাকে আপনার প্রোজেক্টের ডিপেন্ডেন্সি গুলোর ব্যবহারের স্কোপ নির্ধারণ করতে সাহায্য করে। একে scope বা dependency scope বলা হয়, যা নির্ধারণ করে যে একটি লাইব্রেরি কোন পর্যায়ে ব্যবহৃত হবে (যেমন, শুধুমাত্র compile-time, runtime, অথবা test-এ)।
compile কনফিগারেশন ডিপেন্ডেন্সিগুলো কম্পাইলেশন সময় প্রয়োজন হয়। এটি ডিপেন্ডেন্সির একটি সাধারণ কনফিগারেশন, যা এমন লাইব্রেরি বা জার ফাইল গুলিকে অন্তর্ভুক্ত করে যেগুলি source code কম্পাইল করার জন্য প্রয়োজন। যখন একটি লাইব্রেরি compile কনফিগারেশনে যুক্ত করা হয়, তখন তা আপনার প্রোজেক্টের সোর্স কোড কম্পাইল করার জন্য ব্যবহৃত হবে।
<ivy-module version="2.0">
<info organisation="com.example" module="my-app" />
<dependencies>
<dependency org="org.apache.commons" name="commons-lang3" rev="3.12.0" conf="compile"/>
<dependency org="junit" name="junit" rev="4.13.1" conf="compile"/>
</dependencies>
</ivy-module>
এখানে:
runtime কনফিগারেশন ডিপেন্ডেন্সিগুলো প্রোজেক্টের রানটাইম সময়ে ব্যবহৃত হয়, কিন্তু compile-time এ নয়। এগুলি সাধারণত লাইব্রেরি বা জার ফাইল হয়ে থাকে, যা আপনার অ্যাপ্লিকেশন রান করার সময় প্রয়োজন হয়। উদাহরণস্বরূপ, JDBC ড্রাইভার বা application server লাইব্রেরি।
<ivy-module version="2.0">
<info organisation="com.example" module="my-app" />
<dependencies>
<dependency org="org.apache.commons" name="commons-dbcp2" rev="2.8.0" conf="runtime"/>
</dependencies>
</ivy-module>
এখানে:
test কনফিগারেশন ডিপেন্ডেন্সিগুলো শুধুমাত্র টেস্টিং পর্যায়ে ব্যবহৃত হয়। এগুলি সাধারণত JUnit, Mockito বা অন্য টেস্টিং ফ্রেমওয়ার্কের লাইব্রেরি হতে পারে। এই কনফিগারেশনটি ব্যবহার করে আপনি নিশ্চিত করতে পারেন যে নির্দিষ্ট লাইব্রেরি শুধুমাত্র টেস্ট চলাকালীন ব্যবহৃত হবে, প্রোডাকশন বা রানটাইম বিল্ডে না।
<ivy-module version="2.0">
<info organisation="com.example" module="my-app" />
<dependencies>
<dependency org="org.junit" name="junit" rev="4.13.1" conf="test"/>
</dependencies>
</ivy-module>
এখানে:
এখন, Ivy কনফিগারেশন ডিফাইন করার কিছু বাস্তব উদাহরণ দেখা যাক।
<ivy-module version="2.0">
<info organisation="com.example" module="my-project" />
<dependencies>
<!-- Compile time dependency -->
<dependency org="org.apache.commons" name="commons-lang3" rev="3.12.0" conf="compile"/>
<!-- Runtime dependency -->
<dependency org="org.apache.commons" name="commons-dbcp2" rev="2.8.0" conf="runtime"/>
<!-- Test time dependency -->
<dependency org="org.junit" name="junit" rev="4.13.1" conf="test"/>
</dependencies>
</ivy-module>
এখানে:
এখন, যদি আপনি Ant স্ক্রিপ্ট ব্যবহার করেন, তবে Ivy টাস্কের মাধ্যমে এই কনফিগারেশন অনুযায়ী ডিপেন্ডেন্সি রেজলভ (resolve) করা যেতে পারে।
<project name="IvyExample" default="resolve-dependencies" basedir=".">
<taskdef name="ivy" classname="org.apache.ivy.ant.IvyTask"/>
<target name="resolve-dependencies">
<ivy:resolve file="ivy.xml"/>
</target>
</project>
এখানে:
ivy:resolve
টাস্কটি ivy.xml ফাইল থেকে ডিপেন্ডেন্সি রেজলভ করবে, এবং compile, runtime, এবং test কনফিগারেশন অনুযায়ী লাইব্রেরি ডাউনলোড করবে।Ivy আপনি কনফিগারেশন ডিপেন্ডেন্সি ব্যবহার করতে পারেন, যেখানে একটি কনফিগারেশন অন্য কনফিগারেশনের ডিপেন্ডেন্সি অন্তর্ভুক্ত করে।
<ivy-module version="2.0">
<info organisation="com.example" module="my-app" />
<configurations>
<conf name="compile" />
<conf name="test" extends="compile"/>
</configurations>
<dependencies>
<!-- Compile dependency -->
<dependency org="org.apache.commons" name="commons-lang3" rev="3.12.0" conf="compile"/>
<!-- Test dependency extends compile -->
<dependency org="junit" name="junit" rev="4.13.1" conf="test"/>
</dependencies>
</ivy-module>
এখানে:
<conf name="test" extends="compile"/>
: test কনফিগারেশন compile কনফিগারেশন থেকে ডিপেন্ডেন্সি গ্রহণ করবে।Apache Ivy ডিপেন্ডেন্সি ম্যানেজমেন্টের জন্য তিনটি প্রধান বিল্ট-ই কনফিগারেশন প্রদান করে:
এই কনফিগারেশনগুলো ব্যবহার করে আপনি সহজে আপনার প্রোজেক্টের ডিপেন্ডেন্সি ম্যানেজ করতে পারবেন এবং নির্ধারণ করতে পারবেন কোন লাইব্রেরি কোন পর্যায়ে ব্যবহৃত হবে। Ivy এর মাধ্যমে এই ডিপেন্ডেন্সিগুলোর সঠিক ভার্সন, ট্রান্সিটিভ ডিপেন্ডেন্সি এবং ভার্সন কনফ্লিক্ট হ্যান্ডলিং সহজ হয়।
common.read_more